Aprendizaje Estadístico Supervisado

Natalia da Silva

2024

¿Dónde estamos ?

  • Objetivos y tipos de AE

  • Teoría de la decisión y evaluación de modelos de AE

  • Repaso Modelos Lineales

  • Intro a tidymodels

Plan para hoy

  • Técnicas de Remuestreo

  • Validación cruzada

  • Parámetros auxiliares

Remuestreo

Técnicas de remuestreo

  • Hemos mencionado que para evaluar los modelos con distintos números de parámetro es importante separar la muestra en entrenamiento y testeo.

  • No usar los mismos datos para entrenar el modelo y evaluarlo.

  • Estimar el error de predicción con los datos de entrenamiento subestima el error.

  • El error test se puede calcular fácilmente si contamos con un conjunto de testeo pero hay veces que no contamos con él.

  • En ausencia de un conjunto test que pueda ser usado para estimar el error de testeo hay un conjunto de técnicas que permiten estimar el mismo utilizando el conjunto de entrenamiento disponible.

  • Algunas técnicas ajustan el error de entrenamiento para estimar el error de testeo

Técnicas de remuestreo

  • Las técnicas que veremos hoy estiman el error de testeo manteniendo afuera un conjunto de observaciones de entrenamiento.

  • Idea general: se extraen sucesivas muestras del conjunto de entrenamiento, se ajusta el modelo en cada muestra para obtener información adicional sobre el modelo ajustado

  • Son fundamentales para la estadística moderna.

Aplicaciones habituales

En general: \[ \\ \]

  • Generar (re)-muestras a partir de UN conjunto de datos de entrenamiento.
  • Se usan para evaluar propiedades estadísticas: errores estándard, sesgo, error de predicción.
  • Selección de parámetros de ajuste basados en remuestreo \[ \\ \]

Dos grandes herramientas CV y Bootstrap:

  • Estas técnicas son tan generales que pueden ser utilizadas para la mayoría de los método de aprendizaje

Aplicación: Error validación

  • Nos gustaría estimar la variabilidad en el ajuste de un modelo de regresión lineal.

  • Podemos usar alguna de las técnicas de remuestreo para sacar repetidas muestras del conjunto de entrenamiento, ajustar un modelo de regresión para cada nuevo conjunto y luego examinar hasta que punto el ajuste difiere.

  • Este procedimiento nos puede dar información que no tenemos si ajustamos el modelo solamente una vez con los datos observados.

  • Los métodos de remuestreo pueden tener un alto costo computacional ya que estamos ajustando muchas veces el modelo, pero actualmente el desarrollo computacional no es una limitante como previamente.

Conjunto de validación

  • Queremos estimar el error de predicción, una aproximación válida sería dividir aleatoriamente los datos en dos sub-conjuntos de similar tamaño (entrenamiento y validación).

  • El modelo se ajusta con lo datos de entrenamiento y el modelo se usa para predecir en el conjunto de validación.

  • Se calcula el MSE (regresión) que estima el error de predicción.

Conjunto de validación

Ejemplo: Datos Auto

Datos sobre 392 modelos de autos recabados en 1983, usados en ISLR

\[ \\ \]

Auto |> select(mpg, horsepower, year, name) |> head() 
  mpg horsepower year                      name
1  18        130   70 chevrolet chevelle malibu
2  15        165   70         buick skylark 320
3  18        150   70        plymouth satellite
4  16        150   70             amc rebel sst
5  17        140   70               ford torino
6  15        198   70          ford galaxie 500

Ejemplo: Datos Auto

Relación gasto y potencia

ggplot(Auto) + geom_point(aes(x=horsepower, y=mpg))

Ejemplo: Ajuste modelo lineal

Estimación del error en conjunto de validación:

# Sorteamos indices para conjunto entrenamiento
set.seed(432)
tr <- sample(1:392, 196)

# Ajustamos modelo usando datos tr
fit <- lm(mpg ~ horsepower, subset = tr,  data = Auto)

# Calculamos error MSE en los datos NO utilizados
mean( (Auto$mpg - predict(fit, Auto))[-tr]^2 )
[1] 23.7725

Ejemplo: Ajuste modelo lineal

Repetimos el procedimientos \(R=1000\) veces..

R <- 1000
err.val <- numeric(R)

for (r in 1:R) { 
  tr <- sample(1:392, 196)
  fit <- lm(mpg ~ horsepower, data = Auto, subset = tr)
  err.val[r] <- mean( (Auto$mpg - predict(fit, Auto))[-tr]^2 )
  }

Ejemplo: Ajuste modelo lineal

Repetimos el procedimientos \(R=1000\) veces..

ggplot( mapping=aes(x=err.val, y=1) ) + 
  geom_violin( fill='grey80'  ) + 
  geom_boxplot(width=0.1, fill='steelblue') + 
  labs(x='Error de validación', y='') + 
  theme_bw() 

Ejemplo: modelo polinómico

Extendemos el modelo incluyendo potencias de horsepower en el modelo.

Conjunto de Validación

Simple de entender e implementar pero tiene dos problemas:

  • La estimación del error de predicción puede ser muy variable dependiendo las observaciones seleccionadas en cada sub-conjunto.

  • Esta aproximación tiende a sobrestimar el error de predicción.

Veremos el método de validación cruzada que intenta superar estos problemas

Validación cruzada

Validación cruzada

Validación cruzada implica un refinamiento del conjunto de validación que ataca sus dos problemas.

Método para estimar error de predicción de un modelo.

  • Comparar modelos, seleccionar el de menor error. (Evaluación de modelos)

  • Seleccionar los tuning parameters. (Selección de modelos)

Error de predicción

Idea básica: Dividir los datos en subconjuntos, estimo el modelo con una parte y calculo el error prediciendo datos NO utilizados en la estimación del modelo.

¿Cómo dividir los datos? Trade off entre sesgo y varianza, \[ E\left[ (Y - f(X))^2 \right] = \sigma^2+\left(E \left[\hat f(X)\right]-f(X)\right)^2 + E \left[ ( \hat f(X) - E\hat f(X) )^2 \right] \]

Muchos datos para estimar y pocos para predecir (poco sesgo, mucha varianza),

Validación cruzada

Varias formas de dividir nuestro conjunto de datos. Si tenemos n observaciones:

  • \(n-1\) observaciones para estimar el modelo y 1 para predecir y repito esto \(n\) veces (LOO).

  • \(k\) grupos con \(k<n\): estimo con n-n/k y se predice con n/k, repito el procedimiento k veces.

Validación cruzada: \(n\) subconjuntos LOO

Validación cruzada: \(k < n\) subconjuntos

Validación cruzada: estimación del MSE

\[ CV_k(\hat f) = \frac{1}{k}\sum_{j=1}^k MSE_j=\frac{1}{n} \sum_{i=1}^{n} (y_i - \hat f^{-\kappa(i)}(x_i) )^2 \]

  • Sea \(\kappa: \{1,2\ldots n\} \rightarrow \{1,2,\ldots k\}\)

  • \(\kappa(i)\) indice del subconjunto al que pertenece \(i\)

  • \(\hat f^{-\kappa}\) estimación de \(f\) sin los datos del subconjunto \(\kappa\)

  • En LOO \(\kappa(i) = i\)

Validación cruzada: elegir \(k\)

  • \(k=2\): gran sesgo, solo usa la mitad de los datos

  • \(k=n\): poco sesgo, mucha varianza, las estimaciones son muy similares, mucho costo computacional.

  • \(k= 5\; \mbox{o} \; 10\): menor costo computacional y compromiso entre sesgo y varianza, es lo que se utiliza.

CV en el ejemplo

Luego veremos como implementar CV con tidymodels Pero si realizamos un 10-fold CV obtenemos que el error CV es:

[1] 24.34875

CV en el ejemplo de modelo simple

Repetimos 100 veces el CV con \(k=10\).

  • Caja error de validación, 1000 repeticiones

  • Puntos naranjas error CV, 100 rep con \(k=10\)

  • Punto rojo error CV LOO

CV en el ejemplo de modelo polinómico

Parámetros auxiliares

Parámetros auxiliares

Habitualmente, modelos de ML tienen tunning parameters

  • Son “parametros” que deben ser provistos al algoritmo para que este pueda ser aplicado.

  • Ejemplo: cuantos vecinos utilizamos?. Este valor es necesario para aplicar el algoritmo. \[ \\ \]

El modelo depende de parámetros auxiliares: \(\hat f(x, \alpha)\)

Validación cruzada: selección de parámetros auxiliares

El modelo depende de parámetros auxiliares: \(\hat f(x, \alpha)\)

\[CV(\hat f, \alpha) = \frac{1}{n} \sum_{i=1}^{n} (y_i - \hat f^{-\kappa(i)}(x_i, \alpha) )^2\]

  • Obtenemos \(CV(\hat f, \alpha)\) para varios valores de \(\alpha\)

  • Usamos \(\hat\alpha\) que minimiza \(CV(\hat f, \alpha)\)

  • El modelo final es \(f(x, \hat\alpha)\) que se estima con todos los datos

CV para obtener parámetros auxiliares

  • Llamamos parámetro tunning o auxiliar, porque no queremos hacer inferencia sobre el. No hay que ‘’estimarlo’’.

  • Sin embargo, al usar CV, el valor \(\hat\alpha\) depende los datos.

  • En ML, generalmente NO se toma en cuenta la variabilidad o incertidumbre sobre \(\alpha\).

  • El supuesto implícito es que el algoritmo/modelo es muy flexible y pequeños cambios en \(\alpha\) no afectan el ajuste

CV en Vecino más cercano

Con los datos de Publicidad: elegir cantidad óptima de vecinos.

CV en Vecino más cercano

Para cada valor de \(k\) (vecinos), hay 10 medidas de error.

        RMSE  Rsquared       MAE k    Resample
1  0.7967434 0.9779390 0.6523810 5 Fold01.Rep1
2  1.1908688 0.9703458 0.8894737 5 Fold02.Rep1
3  1.0398846 0.9653127 0.7940000 5 Fold03.Rep1
4  0.8465932 0.9724626 0.6780000 5 Fold04.Rep1
5  0.7099014 0.9796578 0.5620000 5 Fold05.Rep1
6  1.3813037 0.9411348 0.8880000 5 Fold06.Rep1
7  1.1296814 0.9327093 0.8470000 5 Fold07.Rep1
8  1.4683392 0.9664201 1.0790000 5 Fold08.Rep1
9  1.1243220 0.9564098 0.8750000 5 Fold09.Rep1
10 0.6274392 0.9818960 0.5080000 5 Fold10.Rep1

k óptimo

El valor de \(k\) que presenta menor error CV, en este caso \(k^* = 2\)

Regla 1se

Obtener el desvío del error CV para cada valor de \(k\).

Elegir el modelo más simple con error por debajo de \(err(k^*) + se(k^*)\)

Fijar parámetros auxiliares

El método kNN que utilizamos tiene un solo parámetro auxiliar para fijar, que tiene un recorrido discreto y simple de recorrer.

En general, la búsqueda de parámetos auxiliares puede ser compleja:

  • muchos parámetros (ejemplo en kNN, función de distancia, medida de resumen)

  • espacio más difícil para explorar (ejemplo: \(\lambda\) en lasso)

\[ \\ \]

Existen distintas estrategias de búsqueda,

  • Grilla exaustiva

  • Búsqueda aleatoria

  • Combinación